﻿<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Reclamos.aspx.cs" MasterPageFile="MasterPage.Master" Inherits="Web.Pages.Reclamos" %>

<asp:Content ID="mainContent" ContentPlaceHolderID="MainContent" runat="Server" >

    <!-- Estilos -->
    <style type="text/css" >
        #dialogEnviarReclamo input,
        #dialogEnviarReclamo textarea
        {
            width: 98%;
        }
        #dialogEnviarReclamo label
        {
            font-weight: bold;
        }
    </style>
    <!-- Fin de [Estilos] -->

    <!-- $(document).ready -->  
    <script type="text/javascript" >
        
        var controles = { General: {}, Tablas: { Reclamos: {} }, Dialogos: { EnviarReclamo: {} } };
        /* General */
        controles.General.EstadoReclamo                 = "<%= selEstadoReclamo.ClientID %>";
        /* Tablas */
        controles.Tablas.Reclamos.Id                    = "tblReclamos";
        /* Dialogos */
        controles.Dialogos.Reclamo =
        {
            Id             : "dialogEnviarReclamo",
            Title          : "Generar Reclamo",
            IdReclamo      : "txtDialogoReclamo_IdReclamo",
            Asunto         : "txtDialogoReclamo_Asunto",
            Guion          : "txtDialogoReclamo_Guion",
            PanelMensajes  : "pnlDialogoReclamo_Mensajes",
            Mensajes       : "txtDialogoReclamo_Mensajes",
            Respuesta      : "txtDialogoReclamo_Respuesta",
            EstadoReclamo  : "selDialogoReclamo_EstadoReclamo",
            btnEnviar      : "btnEnviarRespuestaReclamo",
        };

        $(document).ready(function()
        {            
            procesarParametros();
            cargarPagina_Reclamos();
        });
        function procesarParametros()
        {
            Framework.Page.Parameters.parseQueryString();
        }
        function cargarPagina_Reclamos()
        {
            Site.Messages.showLoadingMessage();

            Site.Page.setTitle("Reclamos");

            inicializarGrillaReclamos();
            
            inicializarDialogoReclamo();

            Site.Messages.hideLoadingMessage();
        }
    </script>
    <!-- Fin de [$(document).ready] -->
    
    <!-- Grilla Reclamos -->
    <script type="text/javascript" >
        function inicializarGrillaReclamos()
        {
            var estadosReclamo = Helpers.SelectListHelper.getDataFromSelectList(controles.General.EstadoReclamo, true);

            var oculto = false;
            if ( !validarPermisosAdmin(_CurrentUser.Tipo) )
            {
                Framework.Page.Parameters.idProveedor = _CurrentUser.Id;
                oculto = true;
            }

	        var colModel =
            [
                { name: 'Id',           index: 'Id',                        label: 'Id Reclamo',    align: 'center', hidden: true,      search: false,  editable: false, sortable: false,   dataType: 'Int32' },
                { name: 'Ver',          index: 'Ver',                       label: ' ',             align: 'center', hidden: false,     search: false,  editable: false, sortable: false,   dataType: 'String', width: 25 },
                { name: 'IdPago',       index: 'Pago.Id',                   label: 'Id Pago',       align: 'center', hidden: true,      search: false,  editable: false, sortable: false,   dataType: 'Int32' },
                { name: 'IdGuion',      index: 'Pago.Guion.Id',             label: 'Id Guion',      align: 'center', hidden: true,      search: true,   editable: false, sortable: true,    dataType: 'Int32' },
                { name: 'Episodio',     index: 'Pago.Guion.Episodio',       label: 'Ep.',           align: 'center', hidden: false,     search: true,   editable: false, sortable: true,    dataType: 'Int32', width: 70, searchoptions: { sopt: ['eq', 'ne', 'gt', 'lt' ] } },
                { name: 'Titulo',       index: 'Pago.Guion.Titulo',         label: 'Titulo',        align: 'center', hidden: false,     search: true,   editable: false, sortable: true,    dataType: 'String', width: 300, searchoptions: { sopt: ['eq', 'ne', 'bw','cn' ] } },
                { name: 'IdProveedor',  index: 'Pago.Proveedor.Id',         label: 'Id Proveedor',  align: 'center', hidden: true,      search: false,  editable: false, sortable: false,   dataType: 'Int32' },
                { name: 'Proveedor',    index: 'Pago.Proveedor.Apellido',   label: 'Proveedor',     align: 'center', hidden: oculto,    search: true,   editable: false, sortable: true,    dataType: 'String', width: 250, searchoptions: { sopt: ['eq', 'ne', 'bw','cn' ] } },
                { name: 'Fecha',        index: 'Fecha',                     label: 'Fecha',         align: 'center', hidden: false,     search: true,   editable: false, sortable: true,    dataType: 'DateTime', width: 100, searchoptions: { sopt: ['eq', 'ne', 'gt', 'lt' ], dataInit: datePick, attr: { title:'Seleccionar Fecha' } }, formatter: 'date', formatoptions: { srcformat: 'Y-m-d', newformat: 'd/m/Y' } },
                { name: 'IdEstado',     index: 'Estado.Id',                 label: 'Id Estado',     align: 'center', hidden: true,      search: false,  editable: false, sortable: false,   dataType: 'Int32' },
                { name: 'Estado',       index: 'Estado.Nombre',             label: 'Estado',        align: 'center', hidden: false,     search: true,   editable: false, sortable: true, dataType: 'String', width: 250, stype: 'select', searchoptions: { sopt: ['eq', 'ne'], value: estadosReclamo }, formatter: jqGridFormatter_EstadoReclamo }
            ];

            var gridOpts                            = Helpers.jqGridHelper.createGridObject();
                gridOpts.IdGrid                     = "{0}_Grid".format(controles.Tablas.Reclamos.Id);
                gridOpts.IdPager                    = "{0}_GridPager".format(controles.Tablas.Reclamos.Id);
                gridOpts.IdColModel                 = "{0}_GridColModel".format(controles.Tablas.Reclamos.Id);
                gridOpts.ColModel                   = colModel;
                gridOpts.Width                      = _GridInfo.Defaults.Width;
                gridOpts.Height                     = _GridInfo.Defaults.Height;
                gridOpts.Title                      = setGridTitle("Reclamos");
                gridOpts.DefaultSortColumn          = "Pago.Guion.Episodio";
                gridOpts.DefaultSortOrder           = "asc";
                gridOpts.PageSizeList               = [5, 10, 20, 30, 50, 100];
                gridOpts.DefaultPageSize            = _GridInfo.Defaults.PageSize;
            /* jqGrid Properties */
                gridOpts.AutoWidth                  = false;
                gridOpts.ShrinkToFit                = false;
                gridOpts.LoadFilters                = grillaReclamos_LoadFilters;
                gridOpts.LoadFiltersOnSearch        = true;
                gridOpts.OnLoadComplete             = grillaReclamos_OnLoadComplete;
                gridOpts.EditMode                   = Helpers.jqGridHelper.EditMode.Modal;
            /* jqGrid Instance Urls & Params */
                gridOpts.UrlGet                     = "obtenerReclamos";
            /* jqGrid Pager Buttons */
                gridOpts.ShowSearch                 = true;
                gridOpts.ShowRefresh                = true;

            Helpers.jqGridHelper.setGridOpts(gridOpts);
        }
        function grillaReclamos_LoadFilters()
        {
            var rules = [];

            if (!isEmpty(Framework.Page.Parameters.idProveedor))
            {
                var condicionProveedor =
                    {
                        condition: "AND",
                        set:
                        [
                            { match: "AND", field: "Pago.Proveedor.Id", op: "eq", data: Framework.Page.Parameters.idProveedor }
                        ]
                    };
                rules.push( condicionProveedor );
            }

            return JSON.stringify(rules);
        }
        datePick = function(elem)
        {
           jQuery(elem).datepicker();
           //jQuery(elem).datepicker( { minDate: -20, maxDate: "+1M +10D" } );
        }
        function grillaReclamos_OnLoadComplete()
        {
            grillaReclamos_AgregarHandlersBotones();
        }
        function grillaReclamos_AgregarHandlersBotones()
        {
            $(".btnVerReclamo").click
            (
                function()
                {
                    var idReclamo = $(this).attr("id").replace("btnVerReclamo_", "");
                    verReclamo( idReclamo );
                }
            );
            mostrarTooltip(".btnVerReclamo", "Ver detalle del Reclamo");

            $(".btnEditarGuion").click
            (
                function()
                {
                    var idGuion = $(this).attr("id").replace("btnEditarGuion_", "");
                    editarGuion( idGuion );
                }
            );
            mostrarTooltip(".btnEditarGuion", "Ver detalle del Guión");

            $(".btnEditarUsuario").click
            (
                function()
                {
                    var idProveedor = $(this).attr("id").replace("btnEditarUsuario_", "");
                    editarUsuario( idProveedor );
                }
            );
            mostrarTooltip(".btnEditarUsuario", "Ver detalle del Proveedor");
        }
        function grillaReclamos_Refrescar()
        {
            Helpers.jqGridHelper.reloadGrid("tblReclamos_Grid");
        }
    </script>
    <!-- Fin de [Grilla Reclamos] -->

    <!-- Diálogo Reclamos -->
    <script type="text/javascript" >
        function inicializarDialogoReclamo()
        {
            var dialogReclamoOpts =
            {
                title:  controles.Dialogos.Reclamo.Title.toUpperCase(),
                width:  600,
                height: 500
            };
            Helpers.DialogHelper.initializeDialog( controles.Dialogos.Reclamo.Id, dialogReclamoOpts );

            Helpers.SelectListHelper.copyItems(controles.General.EstadoReclamo, controles.Dialogos.Reclamo.EstadoReclamo);

            Helpers.MultiSelectHelper.configure("#{0}".format(controles.Dialogos.Reclamo.EstadoReclamo), false, false, { "width":"250px" } );

            $("#{0}".format(controles.Dialogos.Reclamo.btnEnviar)).click(function () { enviarRespuestaReclamo(); });
        }
        function abrirDialogoReclamo( reclamoInfo )
        {
            limpiarDialogoReclamo();

            $("#{0}".format(controles.Dialogos.Reclamo.IdReclamo)).val(reclamoInfo.Id);
            $("#{0}".format(controles.Dialogos.Reclamo.Guion)).val(reclamoInfo.GuionTitulo + " - Ep. " + reclamoInfo.GuionEpisodio);
            $("#{0}".format(controles.Dialogos.Reclamo.Asunto)).val("Reclamo de " + reclamoInfo.Usuario);

            var mensajes = $("#{0}".format(controles.Dialogos.Reclamo.Mensajes));
            for(var i=0; i < reclamoInfo.Items.length; i++)
            {
                var item = reclamoInfo.Items[i];

                var mensaje_Fecha = $("<div>", { id: "reclamo_{0}".format(i) });
                    mensaje_Fecha.addClass("ui-state-default");
                    mensaje_Fecha.append('<label>{0} - {1}</label>'.format(Helpers.DateTimeHelper.FormatDate(item.Fecha, "dd/mm/yy"), item.Emisor) );
                    mensaje_Fecha.appendTo( mensajes );

                var mensaje_Descripcion = $("<div>");
                    mensaje_Descripcion.html( reemplazarSaltosDeLinea( item.Descripcion, "<br />" ) );
                    mensaje_Descripcion.appendTo( mensajes );

                mensajes.append("<br />");
            }
            
            Helpers.MultiSelectHelper.setSelected(controles.Dialogos.Reclamo.EstadoReclamo, [reclamoInfo.IdEstado], true);
            
            if (!isEmpty(Framework.Page.Parameters.idProveedor))
                habilitarControl( "#{0}".format(controles.Dialogos.Reclamo.EstadoReclamo), false );

            Helpers.DialogHelper.openDialog( controles.Dialogos.Reclamo.Id );
            
            createAccordion(controles.Dialogos.Reclamo.PanelMensajes, 0, 150);

            var ultimoReclamo = $("#reclamo_{0}".format(reclamoInfo.Items.length -1));
            Framework.Effects.scrollTo(ultimoReclamo, "#txtDialogoReclamo_Mensajes", 1000);
        }
        function limpiarDialogoReclamo()
        {
            $("#{0}".format(controles.Dialogos.Reclamo.IdReclamo)).val("");
            $("#{0}".format(controles.Dialogos.Reclamo.Guion)).val("");
            $("#{0}".format(controles.Dialogos.Reclamo.Asunto)).val("");
            $("#{0}".format(controles.Dialogos.Reclamo.Mensajes)).empty();
            $("#{0}".format(controles.Dialogos.Reclamo.Respuesta)).val("");
            
            Helpers.MultiSelectHelper.setSelected(controles.Dialogos.Reclamo.EstadoReclamo, [_EstadosReclamo.SIN_ATENDER.Id], true);
            try 
            {
                $("#{0}".format(controles.Dialogos.Reclamo.PanelMensajes)).accordion("destroy");
            }
            catch (e)
            {
            }
        }
        function cerrarDialogoReclamo()
        {
            Helpers.DialogHelper.closeDialog( controles.Dialogos.Reclamo.Id );
        }
        function verReclamo( idReclamo )
        {
            var parametros = new Object();
                parametros.idReclamo = idReclamo;

            Site.Messages.showLoadingMessage();

            Helpers.AJAXHelper.invoke("obtenerReclamo", JSON.stringify(parametros), verReclamo_Respuesta, null);
        }
        function verReclamo_Respuesta(datos)
        {
            Site.Messages.hideLoadingMessage();

            var respuestaInfo = jQuery.parseJSON(datos.d);
            if ( respuestaInfo.Resultado )
            {
                abrirDialogoReclamo( respuestaInfo.Valor );
            }
        }
        function validarEnviarRespuestaReclamo(parametros)
        {
            var errores = [];
            
            validarDatosRespuestaReclamo(parametros, errores);

            if ( errores.length > 0 )
                return false;
            else
                return true;
        }
        function validarDatosRespuestaReclamo(reclamo, errores)
        {
            if ( isEmpty(reclamo.descripcion) )
                registrarError( $("#{0}".format(controles.Dialogos.Reclamo.Respuesta)), errores );
            if ( reclamo.idEstado == Constants.Entities.DefaultId )
                registrarError( $("#{0}".format(controles.Dialogos.Reclamo.EstadoReclamo)).next(), errores );
        }
        function enviarRespuestaReclamo()
        {
            var parametros =
            {
                idReclamo   : $("#{0}".format(controles.Dialogos.Reclamo.IdReclamo)).val(),
                idEmisor    : _CurrentUser.Id,
                idEstado    : Helpers.MultiSelectHelper.getFirstSelectedValue(controles.Dialogos.Reclamo.EstadoReclamo, Constants.Entities.DefaultId),
                descripcion : $("#{0}".format(controles.Dialogos.Reclamo.Respuesta)).val()
            }

            if ( !validarEnviarRespuestaReclamo( parametros ) )
                return;

            cerrarDialogoReclamo();

            Site.Messages.showLoadingMessage("Enviando respuesta.. Por favor, espere");

            Helpers.AJAXHelper.invoke("enviarRespuestaReclamo", JSON.stringify(parametros).replace(/'/g, "\\'"), enviarRespuestaReclamo_Respuesta, null);
        }
        function enviarRespuestaReclamo_Respuesta(datos)
        {
            Site.Messages.hideLoadingMessage();
            
            var tipoNotificacion = null;
            var forzarCierre = false;

            var respuestaInfo = jQuery.parseJSON(datos.d);
            if ( respuestaInfo.Resultado )
            {
                //var reclamoInfo = respuestaInfo.Valor;
                tipoNotificacion = _notifications.success;
                forzarCierre = false;

                grillaReclamos_Refrescar();
            }
            else
            {
                tipoNotificacion = _notifications.error;
                forzarCierre = true;
            }

            mostrarNotificacion(tipoNotificacion, respuestaInfo.Mensaje, forzarCierre);
        }
    </script>
    <!-- Fin de [Diálogo Reclamos] -->

    <!--HTML-->
    <div id="content" style="margin:0 auto; width:90%;" >

        <br />

        <!-- Grilla Reclamos -->
        <div class="jqGridContainer" >
            <table id="tblReclamos_Grid" ></table>
            <div id="tblReclamos_GridPager" ></div>
            <input type="hidden" id="tblReclamos_GridColModel" />      
        </div>

        <br />

        <!-- Diálogo Reclamos -->
        <div id="dialogEnviarReclamo" style="display:none" >
            <input id="txtDialogoReclamo_IdReclamo" type="text" style="display:none" />
            <label>Asunto:</label><br />
            <input id="txtDialogoReclamo_Asunto" type="text" readonly="readonly" /><br />
            <br />
            <label>Guión:</label><br />
            <input id="txtDialogoReclamo_Guion" type="text" readonly="readonly" /><br />
            <br />
            <div id="pnlDialogoReclamo_Mensajes" >
                <h3>Historial de Mensajes</h3>
                <div id="txtDialogoReclamo_Mensajes" ></div>
            </div>
            <br />
            <textarea id="txtDialogoReclamo_Respuesta" rows="3" cols="1" ></textarea>
            <br />
            <div style="float:right" >
                <label>Estado:</label>
                <select id="selDialogoReclamo_EstadoReclamo" multiple="multiple" style="width:99%" ></select>                
                <div id="btnEnviarRespuestaReclamo" class="botonAccion" >
                    <img src="Images/16x16/email.png" alt="Enviar" />
                    <label>Enviar respuesta</label>
                </div>
            </div>
        </div>
        
        <span style="display:none">
            <select id="selEstadoReclamo" multiple="true" runat="server" ></select>
        </span>

    </div>

</asp:Content>